package com.zan.mongodblearn.pojo;

import lombok.Data;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.util.List;

/**
 * @Author Zan
 * @Create 2024/9/5 10:46
 * @ClassName: Order
 * @Description : 定义实体类型，对应MongoDB中的Order集合
 * 集合命名是： order
 */
// @Document注解：描述当前类型和MongoDB中的一个集合对应，可省略注解，只要属性value对应MongoDB中的集合命名，默认命名规则：首字母转小写
// 如：Order -> order, EgoItem -> egoItem
// Spring Data MongoDB对数据和实体对象的映射处理，是基于Property的，需要为实体类型提供getter|setter方法
@Document
@Data
public class Order {

    /**
     * 主键字段
     * 可以使用注解Id描述，代表此字段是主键字段
     * 如果属性命名是 id | _id，注解就可以省略
     *
     * MongoDB中，默认的主键类型是ObjectId，对应Java中的类型是 String | ObjectId(是Beans包里面的)
     * 如果Java实体中使用字符串类型作为主键，那么映射的MongoDB默认主键方式是
     * MongoDB - ObjectId("xxxxxx")
     * Java对象 - "xxxxxxx"
     */
    @Id
    private String id;

    /**
     * 可以使用注解Field描述属性，用于配置Java实体属性和MongoDB集合Field字段的映射关系
     * 默认映射关系是同名映射
     */
    @Field("title")
    private String title;

    @Field("payment")
    private double payment;

    @Field("items")
    private List<String> items;
}
